<?php

/**
 * Obsluga ciastek.
 */
class My_Cookie
{
    private static $_sPrefix = 'my_';
    private static $_iCzasWDniach = 30;
    private static $_sSciezka = '/';

    //wartosci sa zawsze zakodowane JSONem, wiec mozna tam trzymac tablice
    private $_sWartosc;
    private $_sNazwa;
    private $_iCzasZycia;

    /**
     * statyczny konstruktor ladujacy ewentualna konfiguracje
     * ciasteczek
     */
    public static function __staticConstruct( )
    {
        $oConfig = new Zend_Config_Ini( '../config/cookie.ini', 'cookie' );
        self::$_sPrefix = $oConfig->prefix;
        self::$_iCzasWDniach = $oConfig->waznosc_dni;
        self::$_sSciezka = $oConfig->sciezka;
    }

    /**
     * Tworzenie nowego ciastka.
     * Jezeli poda sie wartosc, to jesli ciastko istnialo wczesniej,
     * zostanie nadpisane. Jesli sie nie poda, to pobierane jest istniejace,
     * albo tworzony jest obiekt pod ustawienie nowego ciastka.
     *
     * @param string nazwa
     * @param mixed wartosc
     */
    public function __construct( $sNazwa, $mWartosc = null )
    {
        //ustawienie nazwy ciastka
        $this->_sNazwa = $sNazwa;
        $this->_iCzasZycia = self::$_iCzasWDniach;

        if( $mWartosc === null )
        {
            //jesli ciastko istnieje, to pobierz wartosc
            if ( !empty( $_COOKIE[self::$_sPrefix.$sNazwa] ) )
            {
                $this->_sWartosc = $_COOKIE[self::$_sPrefix.$sNazwa];
            }
        }
        else
        {
            $this->ustawWartosc( $mWartosc );
        }
    }

    //alias
    public function pobierzDane()
    {
        return $this->pobierzWartosc();
    }

    //alias
    public function ustawDane( $mWartosc )
    {
        $this->ustawWartosc( $mWartosc );
    }

    public function pobierzWartosc()
    {
        $aDane = Zend_Json::decode( $this->_sWartosc );

        //jesli pojedynczy element i index 0, zwroc tylko wartosc
        if( count( $aDane ) == 1 && !empty( $aDane[0] ) )
        {
            return $aDane[0];
        }
        else
        {
            return $aDane;
        }
    }

    public function ustawWartosc( $mWartosc )
    {
        //jesli dane nie sa tablica, to robimy z nich tablice
        //aby wrzucic do JSONa
        if( !is_array( $mWartosc ) )
        {
            $mWartosc = array( $mWartosc );
        }
        $this->_sWartosc = Zend_Json::encode( $mWartosc );
        setcookie( self::$_sPrefix.$this->_sNazwa, $this->_sWartosc, time() + $this->_iCzasZycia*24*3600, self::$_sSciezka );
    }

    public function ustawCzas( $iCzas )
    {
        $this->_iCzasZycia = $iCzas;
        setcookie( self::$_sPrefix.$this->_sNazwa, $this->_sWartosc, time() + $this->_iCzasZycia*24*3600, self::$_sSciezka );
    }

    public function usun()
    {
        setcookie( self::$_sPrefix.$this->_sNazwa, null, time()-3600, self::$_sSciezka );
        unset( $this->_sWartosc, $this->_sNazwa );
    }
}

?>